package eu.telecom_bretagne.RECRUT.service;

import java.util.List;
import java.util.Set;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import eu.telecom_bretagne.RECRUT.data.dao.ArchiveDAO;
import eu.telecom_bretagne.RECRUT.data.dao.CandidatureDAO;
import eu.telecom_bretagne.RECRUT.data.dao.DossierCandidatureDAO;
import eu.telecom_bretagne.RECRUT.data.dao.EmployeDAO;
import eu.telecom_bretagne.RECRUT.data.dao.EntretienDAO;
import eu.telecom_bretagne.RECRUT.data.dao.OffreDAO;
import eu.telecom_bretagne.RECRUT.data.model.Archive;
import eu.telecom_bretagne.RECRUT.data.model.Candidature;
import eu.telecom_bretagne.RECRUT.data.model.DossierCandidature;
import eu.telecom_bretagne.RECRUT.data.model.Employe;
import eu.telecom_bretagne.RECRUT.data.model.Entretien;
import eu.telecom_bretagne.RECRUT.data.model.Offre;

/**
 * Session Bean implementation class ServiceDossierCandidature
 */
@Stateless
@LocalBean
public class ServiceDossierCandidature implements IServiceDossierCandidature {

	@EJB
	DossierCandidatureDAO dossierCandidatureDAO;
	@EJB
	CandidatureDAO candidatureDAO;
	@EJB
	OffreDAO offreDAO;
	@EJB
	EntretienDAO entretienDAO;
	@EJB
	ArchiveDAO archiveDAO;
	@EJB
	EmployeDAO employeDAO;

	/**
	 * Default constructor.
	 */
	public ServiceDossierCandidature() {
	}

	@Override
	public List<DossierCandidature> listeDossierCandidatures() {

		return dossierCandidatureDAO.findAll();
	}

	@Override
	public DossierCandidature lireDossierCandidature(int id) {

		return dossierCandidatureDAO.findById(id);
	}

	@Override
	public void modifierDossierCandidature(int id, String nouveauTitre) {

		DossierCandidature dossier = lireDossierCandidature(id);
		dossier.setTitreDossier(nouveauTitre);
	}

	@Override
	public DossierCandidature creerDossierCandidature(String nouveauTitre,
			int idCandidature, int idOffre) {

		Candidature candidature = candidatureDAO.findById(idCandidature);
		Offre offre = offreDAO.findById(idOffre);
		DossierCandidature dossierCandidature = new DossierCandidature();

		dossierCandidature.setTitreDossier(nouveauTitre);
		dossierCandidature.setOffre(offre);
		dossierCandidature.setCandidature(candidature);

		candidature.getDossierCandidatures().add(dossierCandidature);
		offre.getDossierCandidatures().add(dossierCandidature);

		dossierCandidatureDAO.create(dossierCandidature);
		candidatureDAO.update(candidature);
		offreDAO.update(offre);

		return dossierCandidature;
	}

	@Override
	public void supprimerDossierCandidature(int id) {

		DossierCandidature dossier = dossierCandidatureDAO.findById(id);
		Candidature candidatureDossier = dossier.getCandidature();
		Offre offreDossier = dossier.getOffre();

		Set<Entretien> entretienDossiers = dossier.getEntretiens();

		for (Entretien entretienDossier : entretienDossiers) {
			entretienDossier.getDossierCandidature().removeEntretien(
					entretienDossier);
			entretienDAO.update(entretienDossier);
		}

		Set<Archive> archiveDossiers = dossier.getArchives();

		for (Archive archiveDossier : archiveDossiers) {
			archiveDossier.getDossierCandidature()
					.removeArchive(archiveDossier);
			archiveDAO.update(archiveDossier);
		}

		Set<Employe> employeDossiers = dossier.getEmployes();

		for (Employe employeDossier : employeDossiers) {
			employeDossier.getDossierCandidatures().removeAll(employeDossiers);
			employeDAO.update(employeDossier);
		}

		candidatureDossier.removeDossierCandidature(dossier);
		offreDossier.removeDossierCandidature(dossier);

		offreDAO.update(offreDossier);
		candidatureDAO.update(candidatureDossier);
		dossierCandidatureDAO.delete(dossier);
	}

	@Override
	public void retenirDossierCandidature(int idDossier, int idEmploye) {

		DossierCandidature dossier = lireDossierCandidature(idDossier);
		dossier.setRetenirDossier(true);
	}
	
	@Override
	public void validerDossierRH(int idDossier, int idEmploye) {

		DossierCandidature dossier = lireDossierCandidature(idDossier);
		dossier.setValidationRH(true);
	}

	@Override
	public void validerDossierDD(int idDossier, int idEmploye) {
		
		DossierCandidature dossier = lireDossierCandidature(idDossier);
		dossier.setValidationDD(true);
	}
	
	@Override
	public void accepterDossierCandidature(int idDossier, int idEmploye, String titreArchive) {

		DossierCandidature dossier = lireDossierCandidature(idDossier);
		int idCandidature = dossier.getCandidature().getId();
		int idOffre = dossier.getOffre().getId();

		//ServiceArchive serviceArchive = new ServiceArchive();
		//serviceArchive.creerArchive(titreArchive, idEmploye, idDossier);
		
		ServiceCandidature serviceCandidature = new ServiceCandidature();
		serviceCandidature.supprimerCandidature(idCandidature);
		
		ServiceOffre serviceOffre = new ServiceOffre();
		serviceOffre.supprimerOffre(idOffre);
	}

}
